package com.wuzesheng.logger.entity;

import lombok.Data;

/**
 * @Author 吴泽胜
 * @Date 2022/3/1 13:43
 * @Software IntelliJ IDEA
 * @Describe
 */
@Data
public class Logger {


    /**
     * track_id：埋点跟踪，防止埋点偏移、丢失的问题，进行埋点监控
     */
    private String track_id;

    /**
     * distinct_id：类型是字符串，对用户的标识，对未登录用户，可以填充设备标识、CookieID 等，对于登录用户，
     * 则应该填充注册账号；这里的例子，我们假设是一个登录用户，所以填充的是一个登陆 ID；
     */
	private String distinct_id;

    /**
     * anonymous_id：匿名id；
     */
    private String anonymous_id;

    /**
     * event_id：每个事件需要在埋点注册平台注册，方便埋点统一管理
     */
    private String event_id;

    /**
     * event：事件名，需是合法的变量名，即不能以数字开头，且只包含：大小写字母、数字、下划线和 $，
     * 其中以 $ 开头的表明是系统的预置事件，自定义事件名请不要以 $ 开头，且 event 字段长度最大为 100；
     */
    private String event;

    /**
     * identities：身份识别；
     */
    private Identities identities;

    /**
     * Lib: 埋点sdk 相关文档
     */
    private Lib lib;


    /**
     * login_id: 是否登录 ID,事件的 distinct_id 是否为登录 ID
     */
    private String login_id;

    /**
     * properties：这个 Event 的具体属性，以 dict 的形式存在。
     * 其中以 $ 开头的表明是系统的预置属性，它的类型和中文名已经预先定义好了。
     * 自定义属性名需要是合法的变量名，不能以数字开头，且只包含：
     *     大小写字母、数字、下划线，自定义属性不能以 $ 开头；
     *     同一个名称的 property，在不同 event 中，必须保持一致的定义和类型；
     *     同一个名称的 property 大小写不可以相同，如果已经存在小写属性就不可再导入对应大写属性（比如元数据中有 abc 属性名，不能再传 ABC,Abc 等属性名），
     *      否则数据会校验失败不入库。
     */
    private Properties properties;

    /**
     * project：这条数据所属项目名，若不指定该参数，则需要使用该字段时取值 default，即默认项目。
     * 指定的项目必须是系统中已经存在的项目，否则这条数据将无效，更多项目相关请参见多项目；
     */
    private String project;

    /**
     * time：类型是数值，事件发生的实际时间戳，精确到毫秒；
     */
    private String time;

    /**
     * type：track 表明是记录一个 Event ，这里我们假设是一个商品浏览行为；
     */
    private String type;


    @Override
    public String toString() {
        return "Logger{" +
                "distinct_id='" + distinct_id + '\'' +
                ", anonymous_id='" + anonymous_id + '\'' +
                ", event='" + event + '\'' +
                ", event_id='" + event_id + '\'' +
                ", identities=" + identities +
                ", lib=" + lib +
                ", login_id='" + login_id + '\'' +
                ", properties=" + properties +
                ", project='" + project + '\'' +
                ", time='" + time + '\'' +
                ", type='" + type + '\'' +
                '}';
    }
}
